/*
 * p1475.cpp
 *
 *  Created on: 2013-6-4
 *      Author: zy
 */

#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
#include<vector>
#include<set>
using namespace std;
const double EPS = 1e-16;
const int maxn = 150;
int sig(double d)
{
	return fabs(d) < EPS ? 0 : d < 0 ? -1 : 1;
}

struct Point
{
	double x, y;
	Point()
	{
	}
	Point(double x, double y) :
		x(x), y(y)
	{
	}
	void set(double x, double y)
	{
		this->x = x;
		this->y = y;
	}
	double mod()
	{//模
		return sqrt(x * x + y * y);
	}
	double mod_pow()
	{//模的平方
		return x * x + y * y;
	}
	void output()
	{
		printf("x = %f, y = %f\n", x, y);
	}
	bool operator <(const Point &p) const
	{
		return sig(x - p.x) != 0 ? x < p.x : sig(y - p.y) < 0;
	}
};
double cross(Point o, Point a, Point b)
{
	return (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y);
}
int lineCross(Point a, Point b, Point c, Point d, Point &p)
{
	double s1, s2;
	s1 = cross(a, b, c);
	s2 = cross(a, b, d);
	if (sig(s1) == 0 && sig(s2) == 0)
		return 2;
	if (sig(s2 - s1) == 0)
		return 0;
	p.x = (c.x * s2 - d.x * s1) / (s2 - s1);
	p.y = (c.y * s2 - d.y * s1) / (s2 - s1);
	return 1;
}

void calPolygon(Point*p, int num, double &area, bool &shun)
{
	p[num] = p[0];
	area = 0;
	double tmp;
	for (int i = 0; i < num; i++)
	{
		tmp = p[i].x * p[i + 1].y - p[i].y * p[i + 1].x;
		area += tmp;
	}
	area /= 2.0;
	if (shun = area < 0)
		area = -area;
}
struct Line
{
	Point a, b;
	double angle;
	Line()
	{
	}
	Line(Point a, Point b) :
		a(a), b(b)
	{
		angle = atan2(b.x - a.x, a.y - b.y);
	}
	bool operator <(const Line & l) const
	{
		return (angle - l.angle) != 0 ? angle < l.angle : cross(a, b, l.b) < 0;
	}
	/**
	 叉乘
	 */
	double operator *(const Line & l) const
	{
		return (b.x - a.x) * (l.b.y - l.a.y) - (l.b.x - l.a.x) * (b.y - a.y);
	}
};
bool out(Line m, Line n, Line l)
{
	Point p;
	if (lineCross(m.a, m.b, n.a, n.b, p) != 1)
	{
		return true;
	}
	double d = cross(l.a, l.b, p);
	if (sig(d) != 0)
		return d < 0;
	double a = m * l, b = n * l, c = m * n;
	return sig(a) * sig(b) > 0 && sig(a) * sig(c) < 0;
}
void zzy(Line* l, int n, int &b, int &t)
{
	sort(l, l + n);
	int i, j;
	for (i = 1, j = 0; i < n; i++)
		if (sig(l[i].angle - l[j].angle) != 0)
			l[++j] = l[i];
	for (b = 0, t = 1, i = 2; i <= j; i++)
	{
		while (b < t && out(l[t], l[t - 1], l[i]))
			t--;
		while (b < t && out(l[b], l[b + 1], l[i]))
			b++;
		l[++t] = l[i];
	}
	while (n != t - b)
	{
		n = t - b;
		while (b < t && out(l[t], l[t - 1], l[b]))
			t--;
		while (b < t && out(l[b], l[b + 1], l[t]))
			b++;
	}
}

double area(Point * p, int n)
{
	double res = 0;
	p[n] = p[0];
	for (int i = 0; i < n; i++)
	{
		res += p[i].x * p[i + 1].y - p[i + 1].x * p[i].y;
	}
	return res / 2;
}
double v[maxn], u[maxn], w[maxn];
Point p[maxn];
int n;
Line l[maxn];
int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%lf%lf%lf", &v[i], &u[i], &w[i]);

	return 0;
}
